package leecode

func singleNumber3(nums []int) []int {
	//切片初始化
	result := make([]int, 0, 2)
	temp := nums[0]
	for i := 1; i < len(nums); i++ {
		temp = temp ^ nums[i] //temp为两个不同的数据异或出的结果
	}
	var result1 int
	y := temp & (^temp + 1) //一个数和自己的反码+1 按位与之后可以找出最右侧为1的数
	for i := 0; i < len(nums); i++ {
		if (nums[i] & y) == 0 { //第八位为0的数据中有一个只出现一次的数据
			result1 = result1 ^ nums[i] //求得第一个数据
		}
	}
	result2 := temp ^ result1
	result = append(result, result1, result2)
	return result
}
